A schema is a description that defines in a formal language the structure of data stored in a computer database system. In other words, a schema tells a database service how the data in an associated database should be read. One common use of schemas is to describe the contents of a directory database for a network, such as the Internet. The directory database contains a plurality of data instances that represent various entities, such as persons, groups, computers, resources such as printers, etc. In a computer network that is divided into domains, each domain controller hosts a directory system agent that maintains a local directory database, and a schema for the entire directory database system and data objects created according to the schema are replicated to all the directory services in the system.
Since a schema provides the key to understanding the meanings of data stored in the database constructed according to the schema, it is imperative to ensure that all the definitions of the data attributes in the schema are accurate. If a schema definition of a data object or attribute is incorrect, all the affected data objects become useless. The magnitude of the error is multiplied when the schema and the data objects are replicated to multiple servers. It is, however, very difficult to get all the definitions in schema right at the first time. Some initial definitions of objects and their attributes may simply be wrong for their intended use. Moreover, corrections made to the schema now may conflict with future changes. Thus, users of a schema-based database often feel the need to make changes to the schema definitions. In addition, a user may want to try changing a definition and, if that change does not work, to be able to easily revert to the original definition.
In some applications, however, it has been very difficult for users to change schema definitions. For instance, in one existing directory service application, to protect the integrity of the directory schema, any addition to the schema is irreversible. Once an attribute or class of data objects is added to the schema, the user cannot remove and replace its definition while keeping its identity intact if an error was made in setting an immutable property of the schema object, such as the syntax of an attribute or the relative distinct name (RDN) of the class. Even though that existing application offers support for the notion of “defunct” attributes and classes, the values of identifier attributes of defunct schema attributes and classes could not be reused by newly added schema objects. For the directory service administrators, the inability to make changes is highly undesirable. They are not comfortable with the notion of not being able to back out of an unwanted directory schema addition.
Thus, what is needed is a way to allow changes to be easily made to schema definitions without compromising the integrity of the schema and its associated data instances or introducing conflicts and to allow the changes to be reversed easily if necessary.